Entertainer uses client-server achitecture and it has two main components called \emph{frontend} and \emph{backend}. The backend is a daemon (kind of) server process that runs in the background all the time. It is respossible of keeping the \emph{media library cache}, RSS-feeds and TV-Guide up to date and recording scheduled TV-shows. In other words, backend is respossible of everything else, but displaying media on the screen and interacting with the user. Frontend is a GUI part of the application and it displays photographs, plays music and videos. Frontend can be used via remote control and keyboard. Figure \ref{fig:high_level_arch} illustrates the high level architecture of the Entertainer media center application. There are also other processes included to the Entertainer. Those extra processes offer stuff like system tray icon and GTK-interfaces for preferences.

\begin{figure}[htb]
	\begin{center}
		\includegraphics[angle=0,scale=0.5]{diagrams/high-level-diagram.png}
		\caption{High-level architecure}
		\label{fig:high_level_arch}
	\end{center}
\end{figure}

As figure \ref{fig:high_level_arch} shows, the high-level components of the Entertainer are \emph{Frontend}, \emph{Backend}, \emph{Media library Cache} and \emph{Configuration tools}. Backend can communicate with other processes via sockets. Frontend connects to backend when it's executed. It sends simple messages to backend as needed. For example, when user selects a TV-show for recording the frontend sends a message to the backend, which handels the scheduling and recording of the show. Also configration tools notify backend that config files has been changed. This way backend knows to read them again and update it's internal state.

Content can be imagined in between of backend and frontend processes. Backend process indexes files, downloads metadata and generates thumbnails. This activity keeps cache files, which are SQLite databases, up to date. Frontend reads the cache and doesn't care about backend. Backend does also scheduled operations including updating feed cache and guide, which both are SQLite databases as well.
